/*
*   javascript  基于面向对象的编程语言
*   1. 创建对象
*      1.1  new  Object
*      1.2 字面量  {}
*      1.3 new 构造函数()   特殊的函数  可以创建对象
* */

//空对象
// let obj = new Object()
let obj = {}
console.log(obj, typeof obj)
// 存储数据 添加属性   对象.属性名 = 值    支持动态属性赋值
obj.info = 'hello obj'
obj.num = 1
console.log(obj)

//访问对象中的属性值  对象.属性名
console.log(obj.info)
console.log(obj.num)

//添加操作   函数
obj.sayInfo = function (info) {
    console.log(info)
}
// 调用对象中的函数  对象名.函数名()
obj.sayInfo('hello python')

console.log('--------------------------------')
// 创建对象时 直接完成对象初始化操作
let student = {
    name: 'John',
    age: 20,
    sex: '男',
    study: function (course) {
        console.log('正在学习', course)
    }
}

console.log(student, typeof student)
//访问对象中的属性值
console.log(student.name)
console.log(student.age)
console.log(student['sex'])
student.study('Javascript')

// 遍历对象  获取对象中的属性
for (let attr in student) {
    console.log(student[attr])
}


// 通过构造函数创建对象  function  函数名(){}
function User(name,age,sex){
    this.name = name
    this.age = age
    this.sex = sex
    this.sayInfo = function (){
        console.log('this is obj function')
    }
}
//将一个函数作为构造函数使用时  new
let user = new User('tom',20,'男')
console.log(user,typeof user)
// 调用对象中的函数
user.sayInfo()

console.log('-----------------------------------------')

// js中对象的一个使用场景  数据传递  直接以对象形式传递不方便   字符串  { name: 'John', age: 20, sex: '男'}   json    dict

let person = {
    name: 'John',
    age: 20,
    sex: '男'
}
console.log(typeof person)
console.log(person.age)
console.log(person.name)

// Json   json格式的字符串
let str_person = JSON.stringify(person)
console.log(str_person,typeof str_person)


// 前后端分离项目  {"name":"John","age":20,"sex":"男"}    string  json   ->  javascript   obj
obj_person = JSON.parse(str_person)
console.log(obj_person,typeof obj_person)
console.log(obj_person.name)
console.log(obj_person.age)


